package com.mapaower.project.service;

import com.mapaower.project.entity.Project;
import java.util.List;
import java.util.Optional;

/**
 * 项目服务接口
 * 定义项目相关的业务逻辑方法
 */
public interface ProjectService {

    /**
     * 创建新项目
     * @param project 项目信息
     * @return 创建后的项目
     */
    Project createProject(Project project);

    /**
     * 更新项目信息
     * @param project 项目信息
     * @return 更新后的项目
     */
    Project updateProject(Project project);

    /**
     * 根据ID查找项目
     * @param id 项目ID
     * @return 项目信息
     */
    Optional<Project> getProjectById(Long id);

    /**
     * 根据创建者ID查找项目列表
     * @param creatorId 创建者ID
     * @return 项目列表
     */
    List<Project> getProjectsByCreatorId(Long creatorId);

    /**
     * 获取所有开放的项目列表
     * @return 项目列表
     */
    List<Project> getOpenProjects();

    /**
     * 根据项目类型和状态查找项目
     * @param type 项目类型
     * @param status 项目状态
     * @return 项目列表
     */
    List<Project> getProjectsByTypeAndStatus(Project.ProjectType type, Project.ProjectStatus status);

    /**
     * 搜索项目
     * @param keyword 搜索关键词
     * @return 项目列表
     */
    List<Project> searchProjects(String keyword);

    /**
     * 更新项目状态
     * @param id 项目ID
     * @param status 新项目状态
     * @return 更新后的项目
     */
    Project updateProjectStatus(Long id, Project.ProjectStatus status);

    /**
     * 删除项目
     * @param id 项目ID
     */
    void deleteProject(Long id);
}